# 读取JSON格式数据 - 添加鼠标指向时显示的文本
import json
import pandas as pd
import plotly.express as px
'''
ImportError: Plotly express requires pandas to be installed.
run command: pip install pandas
'''

filename = 'data/eq_data_30_day_m1.json'
with open(filename) as f:
    # json.load()将数据转化为Python能够处理的格式
    all_eq_data = json.load(f)

# 提取'features'相关联的数据
all_eq_dicts = all_eq_data['features']
# print(len(all_eq_dicts))

mags, titles, lons, lats = [], [], [], []

for eq_dict in all_eq_dicts:
    # 提取震级
    mag = eq_dict['properties']['mag']
    title = eq_dict['properties']['title']
    # longitude 经度
    lon = eq_dict['geometry']['coordinates'][0]
    # latitude 纬度
    lat = eq_dict['geometry']['coordinates'][1]
    mags.append(mag)
    titles.append(title)
    lons.append(lon)
    lats.append(lat)

"""
print(mags[:10])
print(titles[:2])
print(lons[:5])
print(lats[:5])
"""

# 输出所有渐变方案
for key in px.colors.named_colorscales():
    print(key)

# 创建一个DataFrame将数据封装起来
data = pd.DataFrame(
    data=zip(lons, lats, titles, mags), columns=['经度', '纬度', '位置', '震级']
)
data.head()

fig = px.scatter(
    # x=lons,
    # y=lats,
    # labels={'x': '经度', 'y': '纬度'},
    data,
    x='经度',
    y='纬度',

    range_x=[-200, 200],
    range_y=[-90, 90],
    width=800,
    height=800,
    title='全球地震散点图',

    size='震级',   # size指定标记的尺寸，这里将'震级'的字段提供给它。
    size_max=10,   # 默认20px
    color='震级',   # size指定标记的尺寸，这里将'震级'的字段提供给它。
    color_continuous_scale='jet',   # 直接使用配色列表名
    # color_continuous_scale=px.colors.diverging.RdYlGn[::-1],      # diverging为连续变量的配色方案
    # color_continuous_scale=px.colors.qualitative.Alphabet,        # qualitative 和 sequential表示离散变量
    # color_continuous_scale=px.colors.sequential.Aggrnyl,

    hover_name='位置',
)

fig.show()

fig.write_html('output/global_earthquakes.html')
